package com.atguigu.tingshu.search.service;

import com.atguigu.tingshu.model.search.AlbumInfoIndex;
import com.atguigu.tingshu.query.search.AlbumIndexQuery;
import com.atguigu.tingshu.vo.search.AlbumInfoIndexVo;
import com.atguigu.tingshu.vo.search.AlbumSearchResponseVo;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface ItemService {


    /**
     * 根据一级分类id获取频道信息
     * @param category1Id
     * @return
     */
    List<Map<String, Object>> getChannel(Long category1Id);

    /**
     * 专辑上架 保存到es
     * @param albumId
     */
    void albumOnSale(Long albumId);

    /**
     * 专辑下架 从es中删除
     * @param albumId
     */
    void albumOffSale(Long albumId);

    /**
     * 批量专辑下架
     */
    void batchAlbumOffSale();

    /**
     * 条件查询
     * 1.关键词搜索
     * 2.分类搜索
     * 3.标签搜索
     * 4.排序
     * 5.分页
     * @param albumIndexQuery
     * @return
     */
    AlbumSearchResponseVo search(AlbumIndexQuery albumIndexQuery);

    /**
     * 智能提示词 关键词补全
     * @param keyword
     * @return
     */
    Set<String> completeSuggest(String keyword);

    /**
     * 根据专辑id查询专辑信息
     * result.put("albumInfo", albumInfo);	获取专辑信息
     * result.put("albumStatVo", albumStatVo);   获取专辑统计信息
     * result.put("baseCategoryView", baseCategoryView);   获取分类信息
     * result.put("announcer", userInfoVo);	获取主播信息
     * @param albumId
     * @return
     */
    Map<String, Object> getAlbumInfo(Long albumId);

    /**
     * 根据一级分类id和不同维度查询专辑信息排行榜
     * @param c1Id
     * @param byType
     * @return
     */
    List<AlbumInfoIndexVo> findRankingList(Long c1Id, String byType);

    /**
     * 提前将ES中的排行榜数据缓存到Redis
     */
    void preCacheRanking();

    /**
     * 查询所有专辑的id集合
     */
    List<Long> findAllAlbumId();

    /**
     * 专辑状态更新
     * @param orderNo
     */
    void albumStatusUpdate(String orderNo,Long userId);
}
